<?php
namespace tp5_lib\common\utility;

use think\Session as ThinkSession;

/**
 * 替换think框架中的Session类
 * 作为容器对象
 */
class Session extends ThinkSession
{
    /**
     * session初始化
     * 修改原来的方法，初始化时，合并传入的设置，而不是覆盖
     */
    public function init(array $config = [])
    {
        $config=array_merge($this->config,$config);
        parent::init($config);
    }
    /**
     * 获取当前session_id
     * 与session_id()不同，会先初始化session再获取id，而且只能获取不能设置
     */
    public function id()
    {
        empty($this->init) && $this->boot();
        return session_id();
    }
    /** 改变session_id,并保留数据 */
    public function transfer()
    {
        empty($this->init) && $this->boot();
        $data=$_SESSION;
        $id=md5(json_encode($data) . microtime());
        $this->destroy();

        session_id($id);
        $this->boot();
        $_SESSION=$data;
        return $id;
    }
    /** 销毁指定id的session */
    public function ban($id)
    {
        empty($this->init) && $this->boot();
        $current=session_id();
        session_commit();

        session_id($id);
        session_start();
        session_destroy();

        session_id($current);
        session_start();
    }
}
